﻿using System;
using System.Windows.Media;

using Game.Common;
using Game.Terrain;
using Game.Terrain.Internal;

namespace Game.Terrain
{
    public static class StandardTerrain
    {
        public static TerrainType Grass 
        {
            get { return GetTerrain("Grass", TerrianResourceFile.Grass, TerrainBitTypes.Mainland, 30); }
        }
        
        public static TerrainType Grass2 
        {
            get { return GetTerrain("Grass2", TerrianResourceFile.Grass2, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass3 
        {
            get { return GetTerrain("Grass3", TerrianResourceFile.Grass3, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass4 
        {
            get { return GetTerrain("Grass4", TerrianResourceFile.Grass4, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass5 
        {
            get { return GetTerrain("Grass5", TerrianResourceFile.Grass5, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass6 
        {
            get { return GetTerrain("Grass6", TerrianResourceFile.Grass6, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass7 
        {
            get { return GetTerrain("Grass7", TerrianResourceFile.Grass7, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass8 
        {
            get { return GetTerrain("Grass8", TerrianResourceFile.Grass8, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass9 
        {
            get { return GetTerrain("Grass9", TerrianResourceFile.Grass9, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass10 
        {
            get { return GetTerrain("Grass10", TerrianResourceFile.Grass10, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass11 
        {
            get { return GetTerrain("Grass11", TerrianResourceFile.Grass11, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass12 
        {
            get { return GetTerrain("Grass12", TerrianResourceFile.Grass12, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass13 
        {
            get { return GetTerrain("Grass13", TerrianResourceFile.Grass13, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass14 
        {
            get { return GetTerrain("Grass14", TerrianResourceFile.Grass14, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass15 
        {
            get { return GetTerrain("Grass15", TerrianResourceFile.Grass15, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass16 
        {
            get { return GetTerrain("Grass16", TerrianResourceFile.Grass16, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass17 
        {
            get { return GetTerrain("Grass17", TerrianResourceFile.Grass17, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass18 
        {
            get { return GetTerrain("Grass18", TerrianResourceFile.Grass18, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass19 
        {
            get { return GetTerrain("Grass19", TerrianResourceFile.Grass19, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Grass20 
        {
            get { return GetTerrain("Grass20", TerrianResourceFile.Grass20, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock 
        {
            get { return GetTerrain("FlatRock", TerrianResourceFile.FlatRock, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock2 
        {
            get { return GetTerrain("FlatRock2", TerrianResourceFile.FlatRock2, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock3 
        {
            get { return GetTerrain("FlatRock3", TerrianResourceFile.FlatRock3, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock4 
        {
            get { return GetTerrain("FlatRock4", TerrianResourceFile.FlatRock4, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock5 
        {
            get { return GetTerrain("FlatRock5", TerrianResourceFile.FlatRock5, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock6 
        {
            get { return GetTerrain("FlatRock6", TerrianResourceFile.FlatRock6, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock7 
        {
            get { return GetTerrain("FlatRock7", TerrianResourceFile.FlatRock7, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock8 
        {
            get { return GetTerrain("FlatRock8", TerrianResourceFile.FlatRock8, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock9 
        {
            get { return GetTerrain("FlatRock9", TerrianResourceFile.FlatRock9, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock10 
        {
            get { return GetTerrain("FlatRock10", TerrianResourceFile.FlatRock10, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock11 
        {
            get { return GetTerrain("FlatRock11", TerrianResourceFile.FlatRock11, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock12 
        {
            get { return GetTerrain("FlatRock12", TerrianResourceFile.FlatRock12, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock13 
        {
            get { return GetTerrain("FlatRock13", TerrianResourceFile.FlatRock13, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock14 
        {
            get { return GetTerrain("FlatRock14", TerrianResourceFile.FlatRock14, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock15 
        {
            get { return GetTerrain("FlatRock15", TerrianResourceFile.FlatRock15, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock16 
        {
            get { return GetTerrain("FlatRock16", TerrianResourceFile.FlatRock16, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock17 
        {
            get { return GetTerrain("FlatRock17", TerrianResourceFile.FlatRock17, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock18 
        {
            get { return GetTerrain("FlatRock18", TerrianResourceFile.FlatRock18, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock19 
        {
            get { return GetTerrain("FlatRock19", TerrianResourceFile.FlatRock19, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FlatRock20 
        {
            get { return GetTerrain("FlatRock20", TerrianResourceFile.FlatRock20, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType WaterVeryShallow
        {
            get { return GetTerrain("Water Very Shallow", TerrianResourceFile.WaterVeryShallow, TerrainBitTypes.Water); }
        }
        
        public static TerrainType WaterShallow
        {
            get { return GetTerrain("Water Shallow", TerrianResourceFile.WaterShallow, TerrainBitTypes.Water); }
        }
        
        public static TerrainType WaterMedium
        {
            get { return GetTerrain("Water Medium", TerrianResourceFile.WaterMedium, TerrainBitTypes.Water); }
        }
        
        public static TerrainType WaterDeep
        {
            get { return GetTerrain("Water Deep", TerrianResourceFile.WaterDeep, TerrainBitTypes.Water); }
        }
        
        public static TerrainType WaterOcean
        {
            get { return GetTerrain("Water Ocean", TerrianResourceFile.WaterOcean, TerrainBitTypes.Water); }
        }
        
        public static TerrainType Concrete1 
        {
            get { return GetTerrain("Concrete 1", TerrianResourceFile.Concrete1, TerrainBitTypes.Street); }
        }
        
        public static TerrainType Mud1 
        {
            get { return GetTerrain("Mud 1", TerrianResourceFile.Mud1, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand1 
        {
            get { return GetTerrain("Sand 1", TerrianResourceFile.Sand1, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand2 
        {
            get { return GetTerrain("Sand 2", TerrianResourceFile.Sand2, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand3 
        {
            get { return GetTerrain("Sand 3", TerrianResourceFile.Sand3, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand4 
        {
            get { return GetTerrain("Sand 4", TerrianResourceFile.Sand4, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand5 
        {
            get { return GetTerrain("Sand 5", TerrianResourceFile.Sand5, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand6 
        {
            get { return GetTerrain("Sand 6", TerrianResourceFile.Sand6, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand7 
        {
            get { return GetTerrain("Sand 7", TerrianResourceFile.Sand7, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand8 
        {
            get { return GetTerrain("Sand 8", TerrianResourceFile.Sand8, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand9 
        {
            get { return GetTerrain("Sand 9", TerrianResourceFile.Sand9, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType Sand10 
        {
            get { return GetTerrain("Sand 10", TerrianResourceFile.Sand10, TerrainBitTypes.Mainland); }
        }
        
        public static TerrainType FewSnow1 
        {
            get { return GetTerrain("Snow 1", TerrianResourceFile.FewSnow1, TerrainBitTypes.Snow); }
        }
        
        public static TerrainType GetTerrain(string displayName, 
                                             ImageSource image,
                                             TerrainBit bit,
                                             int attackBonus = 10,
                                             int defenseBonus = 0)
        {
            TerrainTypeBuilder builder = new TerrainTypeBuilder();
            builder.Name = displayName;
            builder.ImageSource = image;
            builder.AttackBonus = attackBonus;
            builder.DefenseBonus = defenseBonus;
            builder.TerrainBits.Add(bit);
            return new TerrainType(builder);
        }
    }
}
